package cn.catax.consultai;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.coobee.boot.config.flux.SecurityConfigurationSupport;
import com.coobee.core.security.JWTAuthOptions;
import com.coobee.core.security.jwt.JWTOptions;
import com.coobee.core.security.options.KeyStoreOptions;
import com.coobee.system.realm.TenantRealm;
import com.coobee.system.realm.UserRealm;

/**
 * 系统使用资源配置
 * 
 * @author: lifeng
 * @Date: 2020/3/28 11:48
 */
@Configuration
public class AppConfiguration {

	/**
	 * 用户域对象 : 对应获取用户的权限等数据，可以使用二级缓存
	 * 
	 * @return
	 */
	@Bean
	public UserRealm userRealm() {
		return new TenantRealm();
	}

	/**
	 * 安全过滤
	 *
	 * @return SecurityConfigurationSupport
	 */
	@Bean
	public SecurityConfigurationSupport securitySupport(UserRealm userRealm) {

		// 认证授权配置
		JWTAuthOptions jwtAuthOptions = new JWTAuthOptions();
		jwtAuthOptions.setJWTOptions(new JWTOptions().setExpiresInSeconds(7 * 24 * 60 * 60));
		jwtAuthOptions.setKeyStore(new KeyStoreOptions().setPath("keystore.jceks") // 查找classes根目录keystore.jceks文件
				.setPassword("bc8e59e0e88b44d1bc2fff9e3dfb3109"));

		// 权限配置
		SecurityConfigurationSupport support = new SecurityConfigurationSupport();
		support.definition("/devtools=anno")// 开发工具
				.definition("/user-api/system/login=anno") // 登陆
				.definition("/user-api/system/captcha=anno") // 图形验证码
				.definition("/user-api/system/verify=anno") // 短信验证码
				.definition("/user-api/system/reqister=anno") // 注册
				.definition("/user-api/system/logout=anno") // 登出
				.definition("/user-api/system/password=anno") // 密码
				.definition("/admin-api/=user") // 需要用户
				.definition("/tenant-api/=tenant") // 需要商户
				.definition("/user-api/=user") // 需要用户
				.definition("/=user")// 需要用户
				.setRealm(userRealm) // 用户设置
				.setJwtAuthOptions(jwtAuthOptions); // JWT 配置
		return support;
	}
}